home *** CD-ROM | disk | FTP | other *** search
/ Platinum Plus: Home & Hobby / Platinum Plus Home and Hobby CD Explorer.ISO / programs / homefile / homefile.mst < prev    next >
Encoding:
Text File  |  1995-03-18  |  11.3 KB  |  465 lines

  1. '**************************************************************************
  2. '*                       MSSetup Toolkit Sample 2
  3. '**************************************************************************
  4.  
  5. '$DEFINE NO_DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST ASKQUIT      = 200
  12. CONST DESTPATH     = 300
  13. CONST EXITFAILURE  = 400
  14. CONST EXITQUIT     = 600
  15. CONST EXITSUCCESS  = 700
  16. CONST OPTIONS      = 800
  17. CONST APPHELP      = 900
  18. CONST CUSTINST     = 6200
  19. CONST TOOBIG       = 6300
  20. CONST BADPATH      = 6400
  21.  
  22. ''Bitmap ID
  23. CONST LOGO         = 1
  24.  
  25. ''File Types
  26. CONST APPFILES     = 1
  27. CONST WINFILES     = 2
  28. CONST WINSYSFILES  = 3
  29.  
  30.  
  31. GLOBAL DEST$        ''Default destination directory.
  32. GLOBAL WINDEST$     ''Windows destination directory.
  33. GLOBAL WINSYSDEST$  ''Windows system destination directory.
  34. GLOBAL WINDRIVE$    ''Windows drive letter.
  35.  
  36. ''CustInst list symbol names
  37. GLOBAL APPNEEDS$    ''Option list costs per drive
  38. GLOBAL WINNEEDS$
  39. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  40. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  41. GLOBAL README$
  42. GLOBAL REGISTER$
  43. GLOBAL HELPDOC$
  44.  
  45. ''Dialog list symbol names
  46. GLOBAL CHECKSTATES$
  47. GLOBAL STATUSTEXT$
  48. GLOBAL DRIVETEXT$
  49.  
  50.  
  51. DECLARE SUB AddOptFilesToCopyList (ftype%)
  52. DECLARE SUB RecalcOptFiles (ftype%)
  53. DECLARE SUB RecalcPath
  54. DECLARE SUB SetDriveStatus
  55. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  56.  
  57.  
  58.  
  59. INIT:
  60.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  61.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  62.  
  63.     SetBitmap CUIDLL$, LOGO
  64.     SetTitle "HomeFiler 2.05 (sw) Setup"
  65.  
  66.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  67.  
  68.     IF szInf$ = "" THEN
  69.         szInf$ = GetSymbolValue("STF_CWDDIR") + "HOMEFILE.INF"
  70.     END IF
  71.  
  72.     ReadInfFile szInf$
  73.  
  74.     WINDEST$    = GetWindowsDir
  75.     WINDRIVE$   = ucase$(MID$(GetWindowsDir,1,1))
  76.     DEST$       = WINDRIVE$ + ":\HOMEFILE"
  77.     WINSYSDEST$ = WINDEST$ + "SYSTEM"
  78.  
  79.     ''CustInst list symbols
  80.  
  81.     CHECKSTATES$ = "CheckItemsState"
  82.     STATUSTEXT$  = "StatusItemsText"
  83.     DRIVETEXT$   = "DriveStatusText"
  84.  
  85.     FOR i% = 1 TO 3 STEP 1
  86.         AddListItem CHECKSTATES$, "ON"
  87.     NEXT i%
  88.  
  89.     FOR i% = 1 TO 3 STEP 1
  90.         AddListItem STATUSTEXT$, ""
  91.     NEXT i%
  92.  
  93.     FOR i% = 1 TO 7 STEP 1
  94.         AddListItem DRIVETEXT$, ""
  95.     NEXT i%
  96.  
  97.     ReplaceListItem DRIVETEXT$, 7, DEST$
  98.  
  99.     ''Disk cost list symbols
  100.  
  101.     APPNEEDS$   = "AppNeeds"
  102.     WINNEEDS$   = "WinNeeds"
  103.     EXTRACOSTS$ = "ExtraCosts"
  104.     BIGLIST$    = "BigList"
  105.  
  106.     FOR i% = 1 TO 3 STEP 1
  107.         AddListItem BIGLIST$, ""
  108.     NEXT i%
  109.  
  110.     FOR i% = 1 TO 26 STEP 1
  111.         AddListItem EXTRACOSTS$, "0"
  112.     NEXT i%
  113.  
  114.     RecalcPath
  115.     SetDriveStatus
  116.  
  117. '$IFDEF DEBUG
  118.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  119. '$ENDIF ''DEBUG
  120.  
  121.  
  122.  
  123. CUSTINST:
  124.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  125.  
  126.     IF sz$ = "CONTINUE" THEN
  127.         ''Install only if it will fit.
  128.         FOR i% = 1 TO 3 STEP 1
  129.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  130.                 GOSUB TOOBIG
  131.                 GOTO CUSTINST
  132.             END IF
  133.         NEXT i%
  134.         UIPop 1
  135.         GOTO INSTALL
  136.     ELSEIF sz$ = "PATH" THEN
  137.         GOTO GETPATH
  138.     ELSE
  139.         GOSUB ASKQUIT
  140.         GOTO CUSTINST
  141.     END IF
  142.  
  143.  
  144.  
  145. INSTALL:
  146.     ClearCopyList
  147.     AddOptFilesToCopyList APPFILES
  148.     AddOptFilesToCopyList WINFILES
  149.     AddOptFilesToCopyList WINSYSFILES
  150.     CreateDir DEST$, cmoNone
  151.     CopyFilesInCopyList
  152.  
  153.     CreateProgmanGroup "HomeFiler 2.0", "", cmoNone
  154.     ShowProgmanGroup   "HomeFiler 2.0", 1, cmoNone
  155.     CreateProgmanItem  "HomeFiler 2.0", "HomeFiler", MakePath(DEST$,"homefile.exe"), "", cmoOverwrite
  156.  
  157.     HELPDOC$ = "winhelp.exe " + MakePath(DEST$,"homefile.hlp")
  158.  
  159.     CreateProgmanItem  "HomeFiler 2.0", "HELP", HELPDOC$, "", cmoOverwrite
  160.  
  161.     README$ = "notepad.exe " + MakePath(DEST$,"readme.txt")
  162.  
  163.     CreateProgmanItem  "HomeFiler 2.0", "README", README$, "", cmoOverwrite
  164.  
  165.     REGISTER$ = "write.exe " + MakePath(DEST$,"register.wri")
  166.  
  167.     CreateProgmanItem  "HomeFiler 2.0", "Registration", REGISTER$, "", cmoOverwrite
  168.  
  169.  
  170. QUIT:
  171.     ON ERROR GOTO ERRQUIT
  172.  
  173.     IF ERR = 0 THEN
  174.         dlg% = EXITSUCCESS
  175.     ELSEIF ERR = STFQUIT THEN
  176.         dlg% = EXITQUIT
  177.     ELSE
  178.         dlg% = EXITFAILURE
  179.     END IF
  180. QUITL1:
  181.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  182.  
  183.     IF sz$ = "REACTIVATE" THEN
  184.         GOTO QUITL1
  185.     END IF
  186.  
  187.     UIPop 1
  188.  
  189.     END
  190.  
  191. ERRQUIT:
  192.     i% = DoMsgBox("Setup sources were corrupted, Call (813) 988-0464!", "Setup Error!", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  193.     END
  194.  
  195.  
  196.  
  197. GETPATH:
  198.     SetSymbolValue "EditTextIn", DEST$
  199.     SetSymbolValue "EditFocus", "END"
  200. GETPATHL1:
  201.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  202.  
  203.     IF sz$ = "CONTINUE" THEN
  204.         olddest$ = DEST$
  205.         DEST$ = GetSymbolValue("EditTextOut")
  206.  
  207.         ''Validate new path.
  208.  
  209.         IF IsDirWritable(DEST$) = 0 THEN
  210.             GOSUB BADPATH
  211.             GOTO GETPATHL1
  212.         END IF
  213.         UIPop 1
  214.  
  215.         ''Truncate display if too long.
  216.  
  217.         IF LEN(DEST$) > 23 THEN
  218.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  219.         ELSE
  220.             ReplaceListItem DRIVETEXT$, 7, DEST$
  221.         END IF
  222.  
  223.         ''Recalc if path changed.
  224.  
  225.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  226.             RecalcPath
  227.             SetDriveStatus
  228.         ELSE
  229.             ''Do it Anyway!
  230.             RecalcPath
  231.             SetDriveStatus
  232.         END IF
  233.  
  234.         olddest$ = ""
  235.         GOTO CUSTINST
  236.     ELSEIF sz$ = "REACTIVATE" THEN
  237.         RecalcPath
  238.         SetDriveStatus
  239.         GOTO GETPATHL1
  240.     ELSEIF sz$ = "EXIT" THEN
  241.         GOSUB ASKQUIT
  242.         GOTO GETPATHL1
  243.     ELSE
  244.         UIPop 1
  245.         GOTO CUSTINST
  246.     END IF
  247.  
  248.  
  249.  
  250. TOOBIG:
  251.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  252.  
  253.     IF sz$ = "REACTIVATE" THEN
  254.         RecalcPath
  255.         SetDriveStatus
  256.         GOTO TOOBIG
  257.     END IF
  258.  
  259.     UIPop 1
  260.  
  261.     RETURN
  262.  
  263.  
  264. BADPATH:
  265.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  266.  
  267.     IF sz$ = "REACTIVATE" THEN
  268.         RecalcPath
  269.         SetDriveStatus
  270.         GOTO BADPATH
  271.     END IF
  272.  
  273.     UIPop 1
  274.  
  275.     RETURN
  276.  
  277.  
  278. ASKQUIT:
  279.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  280.  
  281.     IF sz$ = "EXIT" THEN
  282.         UIPopAll
  283.         ERROR STFQUIT
  284.     ELSEIF sz$ = "REACTIVATE" THEN
  285.         GOTO ASKQUIT
  286.     ELSE
  287.         UIPop 1
  288.     END IF
  289.     RETURN
  290.  
  291.  
  292.  
  293. '**
  294. '** Purpose:
  295. '**     Adds the specified option files to the copy list.
  296. '** Arguments:
  297. '**     ftype%  - type of files to add, one of the following:
  298. '**             APPFILES, OPTFILES1, OPTFILES2
  299. '** Returns:
  300. '**     none.
  301. '*************************************************************************
  302.  
  303. SUB AddOptFilesToCopyList (ftype%) STATIC
  304.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  305.  
  306.     IF ftype% = APPFILES THEN
  307.         AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$
  308.     ELSEIF ftype% = WINFILES THEN
  309.         AddSectionFilesToCopyList "WinFiles", SrcDir$, WINDEST$
  310.     ELSEIF ftype% = WINSYSFILES THEN
  311.         AddSectionFilesToCopyList "WinSysFiles", SrcDir$, WINSYSDEST$
  312.     END IF
  313.  
  314.     SrcDir$ = ""
  315. END SUB
  316.  
  317.  
  318. '**
  319. '** Purpose:
  320. '**     Recalculates disk space for the given option files and sets
  321. '**     the status info symbol "StatusItemsText".
  322. '** Arguments:
  323. '**     ftype% - type of files to add, one of the following:
  324. '**             APPFILES, OPTFILES1, OPTFILES2
  325. '** Returns:
  326. '**     none.
  327. '*************************************************************************
  328.  
  329. SUB RecalcOptFiles (ftype%) STATIC
  330.     CursorSave% = ShowWaitCursor()
  331.  
  332.     ClearCopyList
  333.  
  334.     AddOptFilesToCopyList ftype%
  335.  
  336.     fExtra% = 0
  337.  
  338.     IF ftype% = APPFILES THEN
  339.         ListSym$ = APPNEEDS$
  340.     ELSEIF ftype% = WINFILES THEN
  341.         ListSym$ = WINNEEDS$
  342.     ELSEIF ftype% = WINSYSFILES THEN
  343.         ListSym$ = WINNEEDS$
  344.     END IF
  345.  
  346.     ''Add extra cost to Windows drive for ini/progman, etc.
  347.  
  348.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  349.     ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  350.     fExtra% = 1
  351.  
  352.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  353.  
  354.     cost& = 0
  355.  
  356.     FOR i% = 1 TO 26 STEP 1
  357.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  358.     NEXT i%
  359.  
  360.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  361.  
  362.     IF StillNeed& > 0 THEN
  363.         ReplaceListItem BIGLIST$, ftype%, "YES"
  364.     ELSE
  365.         ReplaceListItem BIGLIST$, ftype%, ""
  366.     END IF
  367.  
  368.     IF fExtra% THEN
  369.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  370.     END IF
  371.  
  372.     RestoreCursor CursorSave%
  373.     ListSym$ = ""
  374. END SUB
  375.  
  376.  
  377. '**
  378. '** Purpose:
  379. '**     Recalculates disk space and sets option status info according
  380. '**     to the current destination path.
  381. '** Arguments:
  382. '**     none.
  383. '** Returns:
  384. '**     none.
  385. '*************************************************************************
  386.  
  387. SUB RecalcPath STATIC
  388.  
  389.     CursorSave% = ShowWaitCursor()
  390.  
  391.     RecalcOptFiles APPFILES
  392.     RecalcOptFiles WINFILES
  393.     RecalcOptFiles WINSYSFILES
  394.  
  395.     RestoreCursor CursorSave%
  396. END SUB
  397.  
  398.  
  399. '**
  400. '** Purpose:
  401. '**     Sets drive status info according to latest disk space calcs.
  402. '** Arguments:
  403. '**     none.
  404. '** Returns:
  405. '**     none.
  406. '*************************************************************************
  407.  
  408. SUB SetDriveStatus STATIC
  409.  
  410.     drive$  = ucase$(MID$(DEST$,1,1))
  411.     ndrive% = ASC(drive$) - ASC("A") + 1
  412.  
  413.     IF drive$ = WINDRIVE$ THEN
  414.        cost&  = VAL(GetListItem(APPNEEDS$,ndrive%)) + VAL(GetListItem(WINNEEDS$,ndrive%))
  415.     ELSE
  416.        cost&  = VAL(GetListItem(APPNEEDS$,ndrive%))
  417.     END IF
  418.  
  419.     free& = GetFreeSpaceForDrive(drive$)
  420.  
  421.     ReplaceListItem DRIVETEXT$, 1, ucase$(drive$) + ":"
  422.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  423.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  424.  
  425.     IF drive$ = WINDRIVE$ THEN
  426.        ReplaceListItem DRIVETEXT$, 4, ucase$(WINDRIVE$) + ":"
  427.        ReplaceListITem DRIVETEXT$, 5, "(same drive!)"
  428.        ReplaceListITem DRIVETEXT$, 6, "(same drive!)"
  429.     ELSE
  430.        ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  431.  
  432.        free& = GetFreeSpaceForDrive(WINDRIVE$)
  433.        cost& = VAL(GetListItem(WINNEEDS$,ndrive%))
  434.  
  435.        ReplaceListItem DRIVETEXT$, 4, ucase$(WINDRIVE$) + ":"
  436.        ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  437.        ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  438.     END IF
  439. END SUB
  440.  
  441.  
  442. '**
  443. '** Purpose:
  444. '**     Appends a file name to the end of a directory path,
  445. '**     inserting a backslash character as needed.
  446. '** Arguments:
  447. '**     szDir$  - full directory path (with optional ending "\")
  448. '**     szFile$ - filename to append to directory
  449. '** Returns:
  450. '**     Resulting fully qualified path name.
  451. '*************************************************************************
  452.  
  453. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  454.     IF szDir$ = "" THEN
  455.         MakePath = szFile$
  456.     ELSEIF szFile$ = "" THEN
  457.         MakePath = szDir$
  458.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  459.         MakePath = szDir$ + szFile$
  460.     ELSE
  461.         MakePath = szDir$ + "\" + szFile$
  462.     END IF
  463. END FUNCTION
  464.  
  465.